﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using PROFIP.Utils;
using PROFIP.Persistence.DTO.Scales;

namespace PROFIP
{
    public partial class PASForm : ScaleForm
    {
        public PASForm(MainForm mainForm, PASDTO dto, int avaliationSheetIndex)
            : base(mainForm, dto, avaliationSheetIndex)
        {
            InitializeComponent();
            if (dto == null) return;

            Utilities.checkIndice(InfanciaSociabilidadeEDistanciamento, dto.InfanciaSociabilidadeEDistanciamento);
            Utilities.checkIndice(InfanciaRelacoesComOsPAres, dto.InfanciaRelacoesComOsPAres);
            Utilities.checkIndice(InfanciaDesempenhoEscolar, dto.InfanciaDesempenhoEscolar);
            Utilities.checkIndice(InfanciaAdaptacaoEscolar, dto.InfanciaAdaptacaoEscolar);
            Utilities.checkIndice(AdolescenciaSociabilidadeEDistanciamento, dto.AdolescenciaSociabilidadeEDistanciamento);
            Utilities.checkIndice(AdolescenciaRelacoesComOsPares, dto.AdolescenciaRelacoesComOsPares);
            Utilities.checkIndice(AdolescenciaDesempenhoEscolar, dto.AdolescenciaDesempenhoEscolar);
            Utilities.checkIndice(AdolescenciaAdaptacaoEscolar, dto.AdolescenciaAdaptacaoEscolar);
            Utilities.checkIndice(AdolescenciaAspectosSociaisESexuais, dto.AdolescenciaAspectosSociaisESexuais);
            Utilities.checkIndice(AdolescenciaFinalSociabilidadeEDistanciamento, dto.AdolescenciaFinalSociabilidadeEDistanciamento);
            Utilities.checkIndice(AdolescenciaFinalRelacoesComOsPares, dto.AdolescenciaFinalRelacoesComOsPares);
            Utilities.checkIndice(AdolescenciaFinalDesempenhoEscolar, dto.AdolescenciaFinalDesempenhoEscolar);
            Utilities.checkIndice(AdolescenciaFinalAdaptacaoEscolar, dto.AdolescenciaFinalAdaptacaoEscolar);
            Utilities.checkIndice(AdolescenciaFinalAspectosSociaisESexuais, dto.AdolescenciaFinalAspectosSociaisESexuais);
            Utilities.checkIndice(AdulticiaSociabilidadeEDistanciamento, dto.AdulticiaSociabilidadeEDistanciamento);
            Utilities.checkIndice(AdulticiaRelacoesComOsPares, dto.AdulticiaRelacoesComOsPares);
            Utilities.checkIndice(AdulticiaCasado, dto.AdulticiaCasado);
            Utilities.checkIndice(AdulticiaNuncaCasouGT30, dto.AdulticiaNuncaCasouGT30);
            Utilities.checkIndice(AdulticiaNuncaCasouLT30, dto.AdulticiaNuncaCasouLT30);
            Utilities.checkIndice(GeralEducacao, dto.GeralEducacao);
            Utilities.checkIndice(GeralEmpregadoOuEstuda1, dto.GeralEmpregadoOuEstuda1);
            Utilities.checkIndice(GeralEmpregadoOuEstuda2, dto.GeralEmpregadoOuEstuda2);
            Utilities.checkIndice(GeralMudancaEmpregoOuEstudo, dto.GeralMudancaEmpregoOuEstudo);
            Utilities.checkIndice(GeralAquisicaoDeIntependencia, dto.GeralAquisicaoDeIntependencia);
            Utilities.checkIndice(GeralAvaliacaoGlobal, dto.GeralAvaliacaoGlobal);
            Utilities.checkIndice(GeralAdaptacaoSocial, dto.GeralAdaptacaoSocial);
            Utilities.checkIndice(GeralGrauDeInteresse, dto.GeralGrauDeInteresse);
            Utilities.checkIndice(GeralNivelDeEnergia, dto.GeralNivelDeEnergia);
            Application.DoEvents();
        }

        private void onClose(object sender, FormClosingEventArgs e)
        {
            PASDTO dto = new PASDTO();
            dto.InfanciaSociabilidadeEDistanciamento = Utilities.getCheckedIndice(InfanciaSociabilidadeEDistanciamento);
            dto.InfanciaRelacoesComOsPAres = Utilities.getCheckedIndice(InfanciaRelacoesComOsPAres);
            dto.InfanciaDesempenhoEscolar = Utilities.getCheckedIndice(InfanciaDesempenhoEscolar);
            dto.InfanciaAdaptacaoEscolar = Utilities.getCheckedIndice(InfanciaAdaptacaoEscolar);
            dto.AdolescenciaSociabilidadeEDistanciamento = Utilities.getCheckedIndice(AdolescenciaSociabilidadeEDistanciamento);
            dto.AdolescenciaRelacoesComOsPares = Utilities.getCheckedIndice(AdolescenciaRelacoesComOsPares);
            dto.AdolescenciaDesempenhoEscolar = Utilities.getCheckedIndice(AdolescenciaDesempenhoEscolar);
            dto.AdolescenciaAdaptacaoEscolar = Utilities.getCheckedIndice(AdolescenciaAdaptacaoEscolar);
            dto.AdolescenciaAspectosSociaisESexuais = Utilities.getCheckedIndice(AdolescenciaAspectosSociaisESexuais);
            dto.AdolescenciaFinalSociabilidadeEDistanciamento = Utilities.getCheckedIndice(AdolescenciaFinalSociabilidadeEDistanciamento);
            dto.AdolescenciaFinalRelacoesComOsPares = Utilities.getCheckedIndice(AdolescenciaFinalRelacoesComOsPares);
            dto.AdolescenciaFinalDesempenhoEscolar = Utilities.getCheckedIndice(AdolescenciaFinalDesempenhoEscolar);
            dto.AdolescenciaFinalAdaptacaoEscolar = Utilities.getCheckedIndice(AdolescenciaFinalAdaptacaoEscolar);
            dto.AdolescenciaFinalAspectosSociaisESexuais = Utilities.getCheckedIndice(AdolescenciaFinalAspectosSociaisESexuais);
            dto.AdulticiaSociabilidadeEDistanciamento = Utilities.getCheckedIndice(AdulticiaSociabilidadeEDistanciamento);
            dto.AdulticiaRelacoesComOsPares = Utilities.getCheckedIndice(AdulticiaRelacoesComOsPares);
            dto.AdulticiaCasado = Utilities.getCheckedIndice(AdulticiaCasado);
            dto.AdulticiaNuncaCasouGT30 = Utilities.getCheckedIndice(AdulticiaNuncaCasouGT30);
            dto.AdulticiaNuncaCasouLT30 = Utilities.getCheckedIndice(AdulticiaNuncaCasouLT30);
            dto.GeralEducacao = Utilities.getCheckedIndice(GeralEducacao);
            dto.GeralEmpregadoOuEstuda1 = Utilities.getCheckedIndice(GeralEmpregadoOuEstuda1);
            dto.GeralEmpregadoOuEstuda2 = Utilities.getCheckedIndice(GeralEmpregadoOuEstuda2);
            dto.GeralMudancaEmpregoOuEstudo = Utilities.getCheckedIndice(GeralMudancaEmpregoOuEstudo);
            dto.GeralAquisicaoDeIntependencia = Utilities.getCheckedIndice(GeralAquisicaoDeIntependencia);
            dto.GeralAvaliacaoGlobal = Utilities.getCheckedIndice(GeralAvaliacaoGlobal);
            dto.GeralAdaptacaoSocial = Utilities.getCheckedIndice(GeralAdaptacaoSocial);
            dto.GeralGrauDeInteresse = Utilities.getCheckedIndice(GeralGrauDeInteresse);
            dto.GeralNivelDeEnergia = Utilities.getCheckedIndice(GeralNivelDeEnergia);
            base.mainForm.updatePAS(dto, base.avaliationSheetIndex);
        }

        private void SingleSelectInfancia_ItemChecked(object sender, ItemCheckedEventArgs e)
        {
            Utilities.SingleSelect_ItemChecked(sender, e);
            updateInfanciaScore();
        }

        private void SingleSelectInicioAdolescencia_ItemChecked(object sender, ItemCheckedEventArgs e)
        {
            Utilities.SingleSelect_ItemChecked(sender, e);
            updateInicioAdolescenciaScore();
        }

        private void SingleSelectFinalAdolescencia_ItemChecked(object sender, ItemCheckedEventArgs e)
        {
            Utilities.SingleSelect_ItemChecked(sender, e);
            updateFinalAdolescenciaScore();
        }

        private void SingleSelectAdulticia_ItemChecked(object sender, ItemCheckedEventArgs e)
        {
            Utilities.SingleSelect_ItemChecked(sender, e);
            updateAdulticiaScore();
        }

        private void SingleSelectGeral_ItemChecked(object sender, ItemCheckedEventArgs e)
        {
            Utilities.SingleSelect_ItemChecked(sender, e);
            updateGeralScore();
        }

        private void updateInfanciaScore()
        {
            InfanciaScore.Text = getInfanciaScore()+"";
            updateTotalScore();
        }

        private void updateInicioAdolescenciaScore()
        {
            InicioAdolescenciaScore.Text = getInicioAdolescenciaScore()+"";
            updateTotalScore();
        }

        private void updateFinalAdolescenciaScore()
        {
            FinalAdolescenciaScore.Text = getFinalAdolescenciaScore()+"";
            updateTotalScore();
        }

        private void updateAdulticiaScore()
        {
            AdulticiaScore.Text = getAdulticiaScore()+"";
            updateTotalScore();
        }

        private void updateGeralScore()
        {
            GeralScore.Text = getGeralScore()+"";
            updateTotalScore();
        }

        private void updateTotalScore()
        {
            int score = 0;
            score += (int)Utilities.parseNumber(InfanciaScore.Text);
            score += (int)Utilities.parseNumber(InicioAdolescenciaScore.Text);
            score += (int)Utilities.parseNumber(FinalAdolescenciaScore.Text);
            score += (int)Utilities.parseNumber(AdulticiaScore.Text);
            score += (int)Utilities.parseNumber(GeralScore.Text);

            TotalScore.Text = score+"";
        }

        public int getInfanciaScore()
        {
            return getGroupBoxScore(Infancia);
        }

        public int getInicioAdolescenciaScore()
        {
            return getGroupBoxScore(InicioAdolescencia);
        }

        public int getFinalAdolescenciaScore()
        {
            return getGroupBoxScore(FinalAdolescencia);
        }

        public int getAdulticiaScore()
        {
            return getGroupBoxScore(Adulticia);
        }

        public int getGeralScore()
        {
            return getGroupBoxScore(Geral);
        }


        private int getGroupBoxScore(GroupBox box)
        {
            int score = 0;
            Stack<Control> controls = new Stack<Control>();
            foreach (Control ctrl in box.Controls)
            {
                controls.Push(ctrl);
            }
            while (controls.Count > 0)
            {
                Control ctrl = controls.Pop();
                if (ctrl is ListView)
                {
                    ListView list = (ListView)ctrl;
                    foreach (ListViewItem item in list.CheckedItems)
                    {
                        score += (int)Utilities.parseNumber(item.Text);
                        break;
                    }
                }
                else
                {
                    foreach (Control aux in ctrl.Controls)
                    {
                        controls.Push(aux);
                    }
                }
            }
            return score;
        }

    }
}
